From c737e1d194b9fadfbbcfe6a6ce7bc38c16055ef9 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Wed, 3 Oct 2012 19:24:52 +0200 Subject: [PATCH] gtkprintjob: release the surface and backend before the output io channel If the GtkPrintJob is freed too early when the surface has been created but the job hasn't been sent to the printer, it's possible that the file print backend tries to write to the io chaneel when it is already closed. This produces runtime critical warnings: GLib-CRITICAL **: g_io_channel_write_chars: assertion `channel->is_writeable' failed https://bugzilla.gnome.org/show_bug.cgi?id=685420 --- gtk/gtkprintjob.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gtk/gtkprintjob.c b/gtk/gtkprintjob.c index 49c664d88f..439b668626 100644 --- a/gtk/gtkprintjob.c +++ b/gtk/gtkprintjob.c @@ -269,21 +269,21 @@ gtk_print_job_finalize (GObject *object) GtkPrintJob *job = GTK_PRINT_JOB (object); GtkPrintJobPrivate *priv = job->priv; + if (priv->surface) + cairo_surface_destroy (priv->surface); + + if (priv->backend) + g_object_unref (priv->backend); + if (priv->spool_io != NULL) { g_io_channel_unref (priv->spool_io); priv->spool_io = NULL; } - if (priv->backend) - g_object_unref (priv->backend); - if (priv->printer) g_object_unref (priv->printer); - if (priv->surface) - cairo_surface_destroy (priv->surface); - if (priv->settings) g_object_unref (priv->settings); -- 2.30.2